package com.wst.system.test;


import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;
import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class WordExportExample {

    public static void main(String[] args) {
        InputStream ins = null;
        OutputStream out = null;
        try {
            //获取Word模板，模板存放路径
            ins = new FileInputStream("D:\\code\\spring-plugin-server\\src\\main\\resources\\docx\\t1.docx");
            //注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);
            //创建xdocreport上下文对象，用于存放具体数据
            IContext context = report.createContext();
            //创建要替换的文本变量
            List<UserInfo> userInfos = new ArrayList<>(); // 这里也可以使用Map集合
            UserInfo userInfo = new UserInfo();
            userInfo.setName("张三");
            userInfo.setAge("15");
            userInfo.setSex("男");
            userInfos.add(userInfo);
            UserInfo userInfo1 = new UserInfo();
            userInfo1.setName("李四");
            userInfo1.setAge("14");
            userInfo1.setSex("男");
            userInfos.add(userInfo1);
            UserInfo userInfo2 = new UserInfo();
            userInfo2.setName("李梅");
            userInfo2.setAge("16");
            userInfo2.setSex("女");
            userInfos.add(userInfo2);

            //此处的userInfo是word中命名的列表名
            context.put("userInfo", userInfos);
            context.put("title", "测试的标题");
            //创建字段元数据
            FieldsMetadata fm = report.createFieldsMetadata();
            //Word模板中的表格数据对应的集合类型
            fm.load("userInfo", UserInfo.class, true);
            //输出到本地目录
            String filePath = "D:\\code\\spring-plugin-server\\src\\main\\resources\\docx\\结果1.docx";
            out = new FileOutputStream(new File(filePath));
            report.process(context, out);
        } catch (Exception e) {
            System.out.println("生成word发生异常"+e);
        }finally {
            try {
                if (ins != null){
                    ins.close();
                }
                if (out != null){
                    out.close();
                }
            } catch (IOException e) {
                System.out.println("文件流关闭失败"+e);
            }
        }
    }
}
